Но то, что мы сделали в прошлый раз еще не все. Нам теперь надо завести несколько переменных и вычислить их положение в растре.
class CDib
{
.....
LPBITMAPINFOHEADER lpHeader;
RGBQUAD* lpRGB;
BYTE* lpBMP;
.......
};
А теперь код для вычисления этих переменных. void CDib::LoadFile(CString filename)
{
........
// NEW !!!
lpHeader=(LPBITMAPINFOHEADER)ptrBmp;
lpRGB = (RGBQUAD*)(ptrBmp+lpHeader->biSize);
int num=GetNumColor();
DWORD sizetable=num*sizeof(RGBQUAD);
lpBMP=ptrBmp+lpHeader->biSize+sizetable;
}
}
Мы объявили процедуру для вычисления количества цветов. class CDib
{
.....
UINT GetNumColor();
};
И её реализация. UINT CDib::GetNumColor()
{
if ((lpHeader->biClrUsed == 0 ) && (lpHeader->biClrUsed <9))
return (1biClrUsed;
}
Вот давайте посмотрим на наши деяния. Мы объявили новую переменную, как указатель на структуру информации о растре. Сразу за ней начинается таблица цветов. Указатель на неё мы и вычисляем. Теперь надо вычислить размер таблицы. Для этого нужно количество цветов. Если мы умножим количество цветов на размер одной записи и сложим с началом записей, то получим указатель уже на конкретные данные.